/*
 * @Author: HeAo
 * @Date: 2022-09-15 14:05:25
 * @LastEditTime: 2022-09-19 19:08:45
 * @LastEditors: HeAo
 * @Description: 
 * @FilePath: \第二阶段\ES6\day03类和继承\7-symbol.js
 * 别乱动！
 */
/*
作用：1、解决命名冲突   2、消除魔术字符串
*/
// let sy1 = Symbol('myname')
// let sy2 = Symbol()

// let obj = {
//   name: 'zhangsan',
//   age: 12,
//   [sy1]: ' lisi',
//   [Symbol('email')]: 'xxx.com'
// }
// 1、作为属性名
// console.log(sy1)
// console.log(sy2);
// 2、独一无二的体现
// console.log(sy1 === sy2); //false 
// console.log(obj);
// 3、拿值
// console.log(obj[sy1]);

// 4、静态方法 --获取symbol的值 获取obj对象中全部symbol类型的数组
// let res = Object.getOwnPropertySymbols(obj)
// console.log(obj[res[2]]); //res[2]拿到某个symbol的属性名，obj[symbol]拿属性值

// 5、for in 无法遍历到symbol值

// 6.消除魔术字符串 symbol
// function test(shape,options){
// 	let area=0;
// 	switch(shape){
// 		// action
// 		case Shape.SJX:
// 			area=.5*options.width*options.height;
// 			break;
// 		case Shape.ZFX:
// 			area=options.width*optionS.height;
// 			break;
// 		case Shape.CiRCLE:
// 			area=Math.PI*Math.pow(options.r,2);
// 			break;
// 		default:
// 			area=-1;
// 	}
// 	return area
// }
// let Shape={
// 	SJX:Symbol('三角形'),
// 	ZFX:Symbol('三角形'),
// 	CiRCLE:Symbol('圆形')
// }
// console.log(test(Shape.SJX,{width:100,height:100,r:100}));

// 7、全局注册表 symbol.for

// let sy1=Symbol('one');
// let sy2=Symbol('one');
// Symbol.for()
let sy1 = Symbol.for('hello');
let sy2 = Symbol.for('hello');
console.log(sy1 === sy2);
console.log(Symbol.keyFor(sy1));